package com.actionsoft.login;

import com.actionsoft.bpms.commons.login.LoginAdapterInterface;
import com.actionsoft.bpms.commons.login.constant.LoginConst;
import com.actionsoft.bpms.commons.login.control.LoginContext;
import com.actionsoft.bpms.commons.login.control.LoginResult;
import com.actionsoft.bpms.org.cache.UserCache;
import com.actionsoft.bpms.org.model.UserModel;

/**
 * 默认本地用户名+口令验证
 *
 */
public class LoginAdapter implements LoginAdapterInterface {

    /**
     * 依据Context获取登录信息，进行登录检验
     *
     * @return 返回校验结果
     */
    public LoginResult validate(LoginContext context) {
        //首先构造一个登录结果对象
        LoginResult lr = new LoginResult();
        //针对具体业务要求，实现相关代码
        //...
        //获取用户输入的账号
        String localUID = context.getUid();
        //即使是错误情况下也需要设置用户账号，尤其是密码错误时
        lr.setLocalUID(localUID);
        UserModel userModel = UserCache.getModel(localUID);
        if (userModel == null) {// 本地未发现该账户
            //LoginConst是用户身份常量定义，提供了固定的登录状态
            lr.setStatus(LoginConst.LOGIN_STATUS_ERR1);
            //如果登录失败，可将自定义的消息写入下面的方法，前端界面会展示该信息
            lr.setMsg("用户不存在");
            return lr;
        }
        // 用户输入的密码，加密后的密码
        String md5Pwd = context.getMD5Pwd();
        // 原密码
        String password = userModel.getPassword();
        if (password.equals(md5Pwd)) {//密码正确
            lr.setStatus(LoginConst.LOGIN_STATUS_OK);
            lr.setLocalUID(localUID);
            return lr;
        } else {//密码不正确
            lr.setLocalUID(localUID);
            lr.setStatus(LoginConst.LOGIN_STATUS_ERR1);
            return lr;
        }
    }
}
